iT邦幫忙

2026 iThome 鐵人賽

DAY 26
0
ChatGPT & Codex

AI Visual Learning Lab: 30 天用 ChatGPT × Codex 打造 AI 視覺化學習工具系列 第 26 篇

Day 26|做了 25 天功能,今天我決定一個都不加:把 Visual Learning Lab 壓成 90 秒能驗證的產品

  • 分享至 

  • xImage
  •  

做到第 25 天時,我突然發現一件有點尷尬的事。

Visual Learning Lab 已經有 Source Atlas、Learning World、Universal Learning World Compiler、Direct Manipulation、Grounded Semantic Twin,也累積了幾百個自動化測試。但如果今天有一個完全沒看過前 25 篇文章的人打開專案,他可能還是會問:

所以這東西到底厲害在哪?

如果我要花十分鐘解釋架構、再告訴他哪裡要按、為什麼這個畫面和那個畫面其實是同一個 semantic state,那問題就不是評審看不懂,而是產品還沒有把自己的核心價值講清楚。

所以 Day 26 我決定先不加新功能。

今天只有一個目標:

把前 25 天做的東西,收斂成一條大約 90 秒就能親自驗證的 Golden Path。


我希望評審看到的不是功能列表

如果只列目前功能,其實已經很多:

  • PDF / 文字分析
  • Source Atlas
  • Source Lens
  • Interactive Lab
  • Dynamic Simulation
  • Learning World
  • Probability / Process / Spatial representation
  • Direct Manipulation
  • Grounded Semantic Twin

但這種列表其實很危險。

因為它很容易看起來像「我每天加了一個功能」。

我現在真正想證明的是另一件事:

真實教材
    ↓
Semantic Understanding
    ↓
Source Grounding
    ↓
Stable Semantic Entity
    ↓
Interactive Representation
    ↓
Direct Manipulation
    ↓
Canonical Shared State
    ↓
Multiple Synchronized Views
    ↓
Return to Original Source

這條鏈才是 Visual Learning Lab 到目前為止真正的核心。


先把會搶畫面的東西拿掉

前幾天為了測試 runtime,我留下了不少工程介面,例如鍵盤參數 fallback、時間 fallback、3D / static fallback、Exploration Recording、Replay、record counter 等。

它們不是沒用,但放在一般使用者面前,整個 Explore 頁面很像工程控制台。

所以 Day 26 第一件事不是增加東西,而是刪東西。

我把這些 learner-facing controls 收掉,只留下真正會用到的 Play、Pause、Reset、baseline / comparison 等少量工具。

底層 runtime 和安全契約沒有因為 UI 被拿掉就刪除,只是不再讓它們跟主要學習物件搶注意力。

這次也重新調整了 Source 與 Explore 的資訊層級,希望使用者第一眼看到的是:

教材裡的東西,以及它能怎麼被探索。

而不是一排控制器。


Golden Path:從教材裡的一張圖開始

這次沒有用自己為 renderer 量身打造的測試文字。

我拿 MIT OpenCourseWare Classical Mechanics Chapter 5 的拋體運動教材,走實際 production pipeline。

教材中有一張初速度向量分解圖:

  • 初速度向量
  • 水平速度分量
  • 垂直速度分量
  • 發射角
  • 拋物線軌跡

Source Atlas 會把原始教材區域和系統裡已存在的 semantic entities 接起來。

https://ithelp.ithome.com.tw/upload/images/20261010/20184158J2Pv4yf68O.png
這裡有一個很重要的限制:

Source Atlas 並不是在「修改 PDF」。

PDF 還是原來的 PDF。

它只是建立:

source evidence
↔ semantic ID

之間的關係。

當我選到一個有互動 representation 的 semantic entity 時,右側會出現可以進入互動世界的入口。

目前工程名稱叫做:

Open interactive twin

它的底層概念就是 Grounded Semantic Twin。


到底什麼叫「分身」?

這個名字其實連我自己實際驗收時都覺得有點抽象。

最簡單的解釋是:

教材裡那個不能動的概念,在互動世界裡的同一個 semantic object。

例如教材原始條件可能是:

Initial speed = 20 m/s
Launch angle = 45°

這些是教材內容,所以不能因為我拖動畫面就偷偷把原文改掉。

Interactive Twin 會另外保留:

Compiled baseline
20 m/s
45°

Current exploration
100 m/s
24.252°

也就是「教材說什麼」和「我現在探索到哪裡」是兩件不同的事情。

這是我目前很喜歡的一個設計。

因為互動教材很容易讓使用者忘記哪些數字來自來源、哪些是自己調出來的。

Visual Learning Lab 現在刻意把兩者拆開。


直接抓著速度向量拖

進入 Explore 之後,這次我不是去拉一個和畫面分離的 slider。

我直接抓住初速度向量的端點。

向量長度代表初速度,方向代表發射角。

拖動之後,系統把 gesture 轉成 semantic parameter update,再經過 validator 提交到 canonical state。

接著其他 representation 都從同一個 state 更新。

我實際把狀態拖到:

Initial speed ≈ 100 m/s
Launch angle ≈ 24.252°

這時一起更新的不是只有向量。

還包括:

  • trajectory
  • maximum height
  • time of flight
  • horizontal range
  • velocity components
  • state / equation view
  • linked graphs

https://ithelp.ithome.com.tw/upload/images/20261010/20184158XzIalLWOwe.png
這也是我現在認為 Direct Manipulation 真正有價值的地方。

如果只是「拖一個球」,其實很容易做。

比較難的是:

拖動的那個東西,必須真的對應 semantic state,而且所有畫面都認同這次修改。


拖完之後,不再問 AI

另外一個我一直很在意的點是 API。

如果每拖一次都重新問模型:

「請幫我計算現在的軌跡。」

那這個產品不只慢,也會變得非常昂貴,而且不同 request 之間還可能產生語意漂移。

所以現在 Learning World 編譯完成後:

drag
playback
state update
trajectory recomputation
derived values
view synchronization
source navigation

都是 local runtime。

這次 Golden Path 的 direct manipulation 階段:

API request delta = 0。

模型負責理解與提出結構,互動階段由受控 runtime 負責執行。


再回到原始教材

探索完之後,右側還保留:

Return to supporting source

按下去會回到當初這個 semantic entity 所對應的教材區域。

https://ithelp.ithome.com.tw/upload/images/20261010/20184158HNE4kwwsZF.png
這條 roundtrip 對我來說很重要。

因為最後它形成的是:

Source
→ Meaning
→ Interaction
→ State Change
→ Representation
→ Source

而不是:

PDF
→ AI 生一張新圖
→ 使用者不知道這張圖哪裡來的

不是所有東西都應該可以拖

Day 26 還刻意留了一個 control case。

例如 x_position 這種 derived quantity。

如果你看到:

x = v0 cos(theta) t

然後直接拖 x,系統到底應該修改:

  • t?
  • v0?
  • theta?

答案並不唯一。

如果 runtime 沒有合法 inverse mapping,我不希望系統為了看起來很互動,硬生出一個把手。

所以不可操作的 semantic entity 仍然可以:

focus
source grounding
formula trace
related representation

但不一定有 draggable handle。

這是我現在對「互動」的一個重要限制:

能動不代表比較好,知道什麼時候不能亂動反而更重要。


真正的人類驗收,還是抓到問題了

自動化測試可以確認很多事情,但今天實際操作時還是抓到了兩類問題。

第一個是 UX。

我自己第一次照 Golden Path 操作時,其實也一度在找:

到底哪個才是「分身」?

功能存在不代表功能容易被找到。

這次 Source 頁面已經比之前清楚很多,但 Interactive Twin 仍然是一個偏工程術語。

這件事目前先保留成產品限制,而不是假裝第一次使用者一定懂。

第二個問題更重要:validator。

中文拋體教材有一次產生的 Learning World declaration 因為 height = 0 被拒絕。

Terminal 顯示:

Positive semantic parameter has a non-positive range: height

原本的 parameter policy 把 length 和一些必須嚴格大於零的 quantity 放在同一組,因此 ground-level initial height = 0 也被當成非法。

更麻煩的是,後續離線 audit 又證明:

如果粗暴地把所有 length 改成可以等於 0,wavelength = 0 和 radius = 0 也可能被放過。

這讓我重新確認了一件事:

Safety 不是「越嚴越好」,也不是「讓 Demo 通過就好」。

真正需要的是 deterministic semantic contract。

物理量的 dimension/type,和它允許的數值 domain,其實是兩件不同的事情。

這個問題也會繼續列入後續 reliability / security hardening,而不是靠一直重新生成,直到碰巧得到一份 validator 喜歡的 JSON。


今天沒有新增功能,但我反而更知道產品是什麼了

Day 26 最後的成果不是一個新的 renderer。

而是一條現在真的可以操作的 vertical slice:

真實教材
→ 找到來源
→ 找到語意
→ 進入互動 representation
→ 直接操作物件
→ 多視圖同步
→ 回到原始來源

更重要的是,這條路同時把幾個一直分散在前幾天的設計串起來:

  • Source Atlas 負責「它從哪裡來」
  • Semantic ID 負責「它是誰」
  • Learning World 負責「它可以怎麼表示」
  • Validator 負責「它能不能安全進 runtime」
  • Direct Manipulation 負責「人怎麼改它」
  • Canonical State 負責「所有 representation 看的是不是同一件事」
  • Grounded Semantic Twin 負責「探索完還能不能回到證據」

這也是目前我最想讓評審看到的 Visual Learning Lab。

不是一個會把 PDF 摘要成幾個 bullet point 的聊天介面。

而是一個嘗試把教材裡的知識,編譯成「可以被操作、但仍然保留來源」的學習環境。


測試與目前還不能宣稱的事情

Day 26 開發過程中跑過一輪 437 tests 的完整 regression,當時 427 通過,另外 10 個失敗來自被移除的舊 UI control assertions;這些項目後續已用 focused tests 修正與重測。

在 parameter semantic 問題上,相關 focused suite 有 141 個測試通過。

但我不會把這些數字寫成:

「系統已經能正確理解任何教材。」

這些測試能證明的是 validator、state transition、interaction contract、request discipline 等工程行為。

它們不能證明每一份陌生 PDF 的語意都會被模型理解正確。

目前也還有幾個明確限制:

  • Source Atlas 的 grounding 仍然是估計,不是 verified exact localization
  • 單一 MIT OCW 教材成功不能代表普遍成功率
  • semantic domain contract 還需要更完整的陌生案例壓測
  • 第一次使用者不一定知道 Interactive Twin 的意思
  • PyMuPDF 的部署授權義務仍需要處理
  • 模型輸出的穩定性還需要正式量化

這些剛好就是剩下幾天要處理的東西。


下一步:不要再挑容易成功的教材

Day 27 我不想再自己準備一份「很適合 Visual Learning Lab」的教材。

我要開始拿陌生教材攻擊它。

而且這次還會加入一個很現實的問題:

目前一直使用的模型,到底還是不是最適合這套 semantic compiler?

下一步我準備用同一批陌生教材,比較目前模型和更強模型在:

  • representation selection
  • semantic contract stability
  • compile success
  • source grounding
  • interactive usefulness

上的差異。

如果更強模型真的有用,就用數據決定換。

如果沒有,就不因為版本號比較新而換。

剩下四天,開始進入真正的壓力測試。


上一篇
Day 25|我把教材裡的公式接上「會動的分身」
下一篇
Day 27|我拿 10 份陌生教材攻擊自己的系統,結果真的抓到它會「誤導學生」的地方
系列文
AI Visual Learning Lab: 30 天用 ChatGPT × Codex 打造 AI 視覺化學習工具 共 31 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言